lexer grammar AnalizadorCLexer;

options {
  language = Java;
}


@header {package PL.practica6;}


@members{

ArrayList <RecognitionException> errores = new ArrayList<RecognitionException>();

public boolean listaVacia (){
    if (errores.isEmpty()){
      return true;
    }else
      return false;
}

public ArrayList getListaErrores(){return errores;}


@Override
public void reportError (RecognitionException e){
  System.out.println (getErrorMessage(e, getTokenNames()));
  errores.add(e);
}

}

  RETORNAR : 'return';
  BREAK : 'break';
  TIPO : 'int' |'char' |'pointer' |'float';
  VOID : 'void';
  PRINTF : 'printf';
  WHILE : 'while';
  IF : 'if';
  fragment NUEVA_LINEA: '\r\n' ;
  BLANCO: (' '|'\t'|NUEVA_LINEA) {skip();};
  CARACTER : '\'' (LETRA|DIGITO) '\'';
  fragment DIGITO: '0'..'9';
  fragment LETRA : ('a'..'z')|('A'..'Z')|'_';
  EXCLAMACION : '!';
  INTERROGANTE : '?';
  DOSPUNTOS : ':';
 fragment SUMA : '+';
  fragment RESTA : '-';
 ASTERISCO: '*';
  fragment OR : '||';
  fragment AND : '&&';
  DISTINTO : EXCLAMACION IGUAL;
  NUMERO: (DIGITO)+('.'(DIGITO)+)?;
  SEPARADOR: ';';
  INCREMENTO : '++';
  DECREMENTO : '--';
  COMA : ',';
  IGUAL : '=';
  ABRIRCORCHETE : '[';
  CERRARCORCHETE : ']';
  ABRIRLLAVE : '{';
  CERRARLLAVE: '}';
  ABRIRPARENTESIS : '(';
  CERRARPARENTESIS : ')';
  ANGULOS : '<'|'>';
  IDENT : LETRA(LETRA|DIGITO)*;
  CADENA : '"' (options {greedy=false;}:.)* '"';
  OPERADORUNITARIOS : SUMA|RESTA;
  OPERADORLOGICOS : OR |AND;
  COMENTARIO: '/*' (options {greedy=false;}:.)* '*/'{skip();};

